M1标配8G内存,SSD耐久度提升的秘密: 硬件内存压缩; 存储协处理器写入专用模拟SLC

您所在的位置:网站首页 ssd 虚拟内存 寿命 M1标配8G内存,SSD耐久度提升的秘密: 硬件内存压缩; 存储协处理器写入专用模拟SLC

M1标配8G内存,SSD耐久度提升的秘密: 硬件内存压缩; 存储协处理器写入专用模拟SLC

2024-07-04 23:05| 来源: 网络整理| 查看: 265

苹果敢于这么激进的使用 SWAP, 经过研究之后, 可以简单概括为几点:

苹果的二进制模式更容易在程序间共享内存, 以及在需要的时候释放(相比于 Android JVM 为主/App 之间 JNI 二进制互相独立的模式)

系统的内存压缩经过精妙设计, Apple Silicon 支持了内存压缩指令

小容量 SSD 有独立的 SLC 模拟区域, 不仅读取写入更快, 还有超过 TLC 部分一个多数量级的耐久

通过 Apple Silicon 集成的 ASP 存储主控管理器, 可以直接把虚拟文件系统对应的空间映射到 SSD 的 SLC 模拟区域

接下来从头到尾解析:

首先随着内存用量的提升,macOS 首先会把缓存在内存里的内容,如程序二进制的代码页面(如 Mach-O 的程序/应用间可以共享的 dylib 动态库)从内存中 Pageout(这些数据本身就在外存上, 属于 clean page,可以直接被释放掉), 然后把内存里文件IO缓存写回到外存。从而回收一部分内存给新的需要内存的程序使用. 这是最基本的释放逻辑.

当然 iOS 和 macOS 共享一个内核设计, 同时有着接近的 App 开发框架(UIKit/AppKit/Swift 和 MacCatalyst), 都是围绕编译后的二进制机器码运行; 而 Android 上的一等公民是 Java/Kotlin 等 JVM 语言, 他们的代码不太容易像二进制代码那样共享二进制库, 或者是把 JIT 的代码从内存中直接 pageout.

接着就会对活跃度较低的页面进行压缩,Mavericks 系统开始普及的时候还用的是 WKDM 算法, 对 CPU 的要求不高; 到了 Yosimite 换成了 LZ-FSE, 而如今的实现是混合了 WKDM 和 LZ4 这两种算法, 从而兼顾性能和压缩率.

内存压缩能有效减少稀疏对象 dirty page 的内存占用, 压缩率非常高. 但是代价就是需要 CPU 性能做支撑.

然而苹果的牛逼之处就在于, Apple Silicon 直接集成了硬件内存页面压缩/解压指令, 从而提升性能, 更关键的是带来能效上的提升. 

当然如果内存还不够用, 就需要把页面换页到外存上, 这也就是常说的「虚拟内存」或者「页面交换」.

就从实际情况来说, 8G 内存的 M1/M2 平台能维持 10GB 左右的 SWAP 水平还保持流畅. 而 16G 的 M1 我长时间在 20GB 左右的 SWAP 下工作(开启大量网页+FCPX), 也依旧可用. 

从实际的体验上来说, 8G 内存的 M1 M2 确实能强过很多 16G 的 Windows 笔记本, 毕竟很多时候后者短板在 CPU 上.

这就是为什么在 Windows 主流 16G 内存的情况下, Mac 敢给 8GB. 

如果真的像有些人所说, 8G 的 Mac 的内存表现那么差, 用户早到手就退货, 那苹果去年市场占有率就不应该提升.

然而很多人印象里 SSD 的写入次数有限, 且可能听说了有用户买来三个月发现 SSD 寿命用了 3%.

实际上这只是 big sur 早期的一个 bug 导致的问题, 后续的系统也已经修复.

而且我们不难发现, 虽然他写入了 150TB, 但是仅仅消耗了 3% 的寿命, 换言之他的 2TB Mac 的预计寿命是 5PB 写入. 

哪怕他不升级系统修复 bug, 按照这个速度也得五年半才完全耗尽.

而对于 256/512GB 的机型来说, 实际上苹果给这些机器留出了 10-12GB 的独立 SLC 模拟区块用于缓存/SWAP 等任务. 如果按照 TLC 写入, 相当于正常 30GB左右的空间.

作为 TLC 使用的区块只能承受 3000 次的磨损, 而如果作为较为简单的 SLC 使用, 不仅性能更快, 而且耐久度能高达10万次, 也就是比正常区块高一个半数量级的耐久度. 虽然距离傲腾还是差了一个数量级, 但是比起很多激进开 SLC 缓存写放大的 SSD 还是要强很多的.

再加上 macOS 的一个整体化设计, APFS 文件系统容器的 VM 卷的写入能被映射到上述的 SLC 模拟区块, 从而在提升换页速度的基础上减少对主要以 TLC 区域的寿命影响.

结合上述数据计算: 哪怕是最低端的 256G Mac, 都能有 1.5PB 写入量的寿命, 而中端消费级的 SN570 256GB 标称只有标称 150T 的耐久度, 相当于 256G Mac 的 1/10; 就算是 1TB 的 SN570 也仅 600TBW 的标称耐久量.

当然 8+256 的配置在操超重度的使用下确实会有更高的写入量, 这点因人而异. 只有拿出更多样本才有代表性.

在 v2ex 上就有个帖子统计 M1 M2 用户购买后的写入量. 如果按照上面这个老哥一年半 208T 写入(13% 寿命消耗), 那也有 7 年水平的预期寿命, 相信在此之前电池会更早衰减(电池充放电循环 1000 次之后就只有80% 容量, 特殊环境下容量会下降更快).

后面的老哥就用得特别猛, 居然写入了 317T(20% 寿命), 不过不清楚他用了多久(SSD 上电 2160 小时), 以及是如何虐待他的 Mac. 考虑到 V2 上码农比较多, 可能是本机编译比较频繁、且内存压力较大导致的. 一般的办公用户的使用强度很难到这个水平.

至于帖子内的其他 16G 内存的案例, 写入量普遍都不是太高, 说明 Apple Silicon 大多数情况下 SWAP 写入不至于造成用了5年就暴毙. 日常真的不必担心.

这是因为苹果的模拟 SLC 策略设计非常严谨: 用固定的 SLC 模拟区当开头的缓存, 过了之后在用户的部分大概还有一个 10% 的 SLC 模拟区, 之后就是真实的缓外速度, 哪怕是 256G 的低配都能有接近 500MB/s 的水平

在 256/512GB 的容量的 Mac 并不追求极限写入速度(这个容量基本都是办公用户, 没那么频繁的倒腾数据的需求), 这一定程度上也是如今 M2 Mac 减少存储颗粒却基本不影响体验的前提.

作为对比, 像市面上那种 500元/TB 的 SSD 那样开全盘模拟 SLC 缓存去掩盖缓外过慢的问题(256G SN550 缓外基本就只有 300MB/s), 这样造成的多次擦除就会让厂商降低标称耐久度从而规避售后责任.

当然在 1TB 容量以上的 M2 Pro/Max 机型上, 缓外的速度就因多颗 NAND 组成多通道而非常可观.

我手头的 8TB M1 Max 在 80% 容量的情况下, 持续写入仍然能全程保持在平均 3.8GB/s 的水平.

高缓外速度对 FCPX 转优化媒体/渲染产生 ProRes 中间文件、需要频繁导入大容量素材的自媒体和影视 DIT 人员是非常重要的.

Mac mini 配件选购指南

当然, 价格也是很贵的. 只不过这种生产力设备追求的就是性能达标、工作稳定和开箱即用. 真正的用户关注的是这样的设备的体验和产出效益, 而云用户只会喷贵.

最后我还是想补充一点: 地表上的廉价知识只能回答一些简单的问题. 如果仅靠这些看似正确的简单理论, 不依赖基本的数据, 也不去搜集「事实」, 全靠嘴炮去建构「事实」, 那就是彻头彻尾的胡编乱造了.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3